みなさんへの告知板


オンラインゲームからは離れました。これからはリアルょぅι゛ょで頑張ろうと思います


ミジンコゼミナール


ネットゲーム解析初心者向け講座、ミジンコゼミナール 開講!

多重起動、窓化の基礎をしらんやつは見ておけ。
読んでも理解できないやつは解析以前の問題だから文句いうな('A`)

ミジンコゼミナール:ネットゲーム解析講座一覧
1日目:入学/必要な教材 2日目:基本的なアセンブリ言語
3日目:Ollydbg の操作方法と演習 4日目:多重起動1(FindWindow)
5日目:多重起動2(CreateMutex) 6日目:多重起動3(EnumWindows、その他の方法)
7日目:ウィンドウについて
8日目:窓化(D8) 9日目:窓化(D9)
10日目:DLL について 11日目:何か作ってみよう
12日目:試験 13日目:プレゼント

2006年02月26日


Navica○

● Navic○t 解析

ネトゲでは主にゲームに関するデータ(Lvやらマネーやら色々)を格納する入れ物として
データーベースなるものが使われます。
このデータベース、手作業で編集をすることもできますが規模が大きいとかなり面倒くさい
代物となっております。
そこでこのデータベースをイジクルために色々なソフトが出ているのですが、今回は navicat
という比較的扱いやすいツールについてのお話(解析)をします。


まず navicat ですが、お金を払わないと30日しか使えない使用期間の制限があります。

で、どうするか??

答えは簡単、いつも通りにやってしまえばいいわけです。


ではまず、olly さんで navicat を読み込みます。
30日の制限ということは何らかの方法で日付を読み取り、その日付とインストールをした
日付を比較し判断していると考えるのが妥当でしょう。
日付関係の API となると数個に限られますが、今回は一番ベーシックな GETLocalTime をターゲットとします。
olly さんで読み込み GETLocalTime を検索したら F2 でブレークポイントを仕掛けます。
その後、F9 で一気に処理を進めます。


0040CDA8 /$ 83C4 E8 ADD ESP,-18
0040CDAB |. 8D4424 08 LEA EAX,DWORD PTR SS:[ESP+8]
0040CDAF |. 50 PUSH EAX ; /pLocaltime
0040CDB0 |. E8 F3A6FFFF CALL ; \GetLocalTime ⇒ ブレークポイントでSTOP


ブレークポイントで止まりましたが、探しているのは最終判定をしている箇所なのでさらに
F8 でダラダラと進めていきます。 すると問題の日付判定の箇所に当たります。
本当はどのレジスタに年月日が含まれるか解説したいところですが、解析やってる人には
すぐ解る事だと思うのでここでは割愛します。(単純にレジスタの値をトレースするだけだけどね…)

さて、以下がターゲットとなる分岐処理です。
JE命令で判定をし、ダメなら 005402EA にある金払えのメッセージへ飛びます。


005402E0 . 74 0D JE SHORT default_.005402EF
005402E2 . 8BD3 MOV EDX,EBX
005402E4 . 8BC7 MOV EAX,EDI
005402E6 . 66:BE EFFF MOV SI,0FFEF
005402EA . E8 8D36ECFF CALL default_.0040397C ※ エラーメッセージへ。


なのでこのエラーメッセージがある 005402EA に飛ばずに処理を続けられれば
30日間の試用期間内とみなされ問題無くプログラムが起動する事が推測されます。
では JE命令 を JMP命令に書き換えましょう。


修正後
005402E0 EB 0D JMP SHORT default_.005402EF ※ JMP に書き換え
005402E2 . 8BD3 MOV EDX,EBX
005402E4 . 8BC7 MOV EAX,EDI
005402E6 . 66:BE EFFF MOV SI,0FFEF
005402EA . E8 8D36ECFF CALL default_.0040397C ※ エラーメッセージへ。



JMP 命令に書き換えることで 「74 0D」というマシン語が「EB 0D」に変わったと思います。
まずはこれをメモメモ…。

しかし、これだけでは実際の実行ファイル(navicat)に反映されてません。
現在の状況は OS のメモリ上に読みこまれたプログラムの内容を変えただけなのです。
つまりプログラム自体の改変は行われていません。
ではどうすればいいのか?答えは簡単です。
プログラム単体のアドレスを確認し内容を書き換えればいいだけです。

olly さんの左の列を見て頂くと 005****** がありますが、これが OS 上でのメモリアドレス
となります。
ではプログラム自体のアドレスとは?を見るために、右クリック「表示」⇒「実行ファイル」
で表示してみましょう。
すると、左の列にあるアドレスが 0013**** などに変わったと思います。
これがプログラム自体のアドレスとなります。
ちなみに私の環境では以下のようになりました。


0013F6E0 74 0D JE SHORT 0013F6EF
0013F6E2 8BD3 MOV EDX,EBX
0013F6E4 8BC7 MOV EAX,EDI
0013F6E6 66:BE EFFF MOV SI,0FFEF
0013F6EA E8 8D36ECFF CALL 00002D7C


さて、いよいよ最終段階です。このアドレス 0013F6E0 をメモしておきます。
そして olly さんを閉じ、適当なバイナリエディターで開いてみましょう。
訳の分からない16進数が並んでますが、私たちはプログラムのアドレスという宝の地図を
持っているので迷うことはありません。 恐れずに進みましょう。

先ほど調べた JE 命令のアドレス 0013F6E0 を見てみます。
ここに 74 0D とありますね。これを JMP 命令(EB 0D)に書き換えます。
後は上書き保存をして終了です。
保存したら念のため日付をずらして起動してみて下さい。
どうでしょう、問題なく起動しましたか?

今回の解析は簡単でしたね、実際の解析には15分かからなかったと思います。
なにはともあれこれで navicat はおとなしくすることでしょう。
ではみなさん。よいエミュライフを。


2006年02月09日


近況

みなさんお元気ですか?
SP はとても元気です、特にムス(ry

先日マザボを買い換えました。なのでOSも再インストールです。
しかし例によってまたもやSS全部消滅(ノ∀`)

バックアップ取るのをいい加減忘れるなよと小一時間。
FLASH用に確保しといたSSが全て消えました。
まだ構成的なものをハッキリ決めてないから取り直せばいいんだけどさ…。

で、リネ2のクライアントプログラムをダウンロードしなおして
起動したところなぜかシルクロードオンラインの画面が起動しました。
間違ったクライアントをダウンロードしたらしいです。(ぉ

とりあえず ROURAN鯖なるとこにキャラを作ってみました。
そんなこんなで FLASH も含めやり残しが全て終わるのには時間かかりそうな
ナイスGUI。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。